
import view.CotizacionDTO;
import view.DestinoDTO;
import view.HotelDTO;
import view.ItemServicioDTO;
import view.ServicioDTO;
import view.UsuarioDTO;
import controller.Sistema;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Cotizar extends HttpServlet  {
 
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		
        ArrayList<HotelDTO> hoteles = Sistema.getInstancia().getHoteles();
        req.getSession().setAttribute("hoteles", hoteles);
        
        ArrayList<DestinoDTO> destinos = Sistema.getInstancia().buscarDestinos();
        req.getSession().setAttribute("destinos", destinos);
        
		String page="cotizar.jsp";		
		RequestDispatcher dispatcher = req.getRequestDispatcher(page);
		dispatcher.forward(req, resp);	 
	}


	@SuppressWarnings("deprecation")
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
	 {
		String page="cotizar.jsp";
		String action="cotizar";
		
        ArrayList<HotelDTO> hoteles = Sistema.getInstancia().getHoteles();
        req.getSession().setAttribute("hoteles", hoteles);
        
        ArrayList<DestinoDTO> destinos = Sistema.getInstancia().buscarDestinos();
        req.getSession().setAttribute("destinos", destinos);
        
        if (req.getParameter("action")!=null)
        {
        	action=req.getParameter("action");	
        }
        if (req.getParameter("id")!=null && !action.equals("saveCotizacion"))
        {
        	action="verCotizacion";	
        }
		if ("cotizar".equals(action))
		{	
			ArrayList<Integer> habs = new ArrayList<Integer>();
			habs.add(2);
			
			Date fent = new Date(req.getParameter("fechaDesde"));
			Date fsal = new Date(req.getParameter("fechaHasta"));
			
			DestinoDTO sDest = new DestinoDTO();
			HotelDTO sHotel = new HotelDTO();
			if (req.getParameter("destino")!=null &&  Integer.valueOf(req.getParameter("destino"))>0)
			{
				sDest= new DestinoDTO(Integer.valueOf(req.getParameter("destino")));
				for(DestinoDTO d : destinos)
				{
					if (d.getId()==sDest.getId())
					{
						sDest.setNombre(d.getNombre());
					}
				}
			}
			if (req.getParameter("hotel")!=null &&  Integer.valueOf(req.getParameter("hotel"))>0)
			{
				sHotel= new HotelDTO(Integer.valueOf(req.getParameter("hotel")));
				for(HotelDTO h : hoteles)
				{
					if (h.getId()==sHotel.getId())
					{
						sHotel.setNombre(h.getNombre());
					}
				}
			}			
			
			req.getSession().setAttribute("sHotel", sHotel.getNombre());
			req.getSession().setAttribute("sHotelId", sHotel.getId().toString());
			req.getSession().setAttribute("sDestino", sDest.getNombre());
			req.getSession().setAttribute("sDestinoId", sDest.getId().toString());
			req.getSession().setAttribute("sEntrada", fent);
			req.getSession().setAttribute("sSalida", fsal);
			req.getSession().setAttribute("sCategoria", req.getParameter("categoria"));
			req.getSession().setAttribute("sCategoriaInterna", req.getParameter("categoriaInterna"));
			req.getSession().setAttribute("sCantidadHabitaciones", habs.size());
			
			ArrayList<ServicioDTO> servicios = Sistema.getInstancia().cotizar(sDest
					, sHotel
					, new Date(req.getParameter("fechaDesde"))
					, new Date(req.getParameter("fechaHasta"))
					, Integer.valueOf(req.getParameter("categoria"))
					, Integer.valueOf(req.getParameter("categoriaInterna"))
					, habs);
			
			if (servicios!=null)
			{
				 req.getSession().setAttribute("servicios", servicios);
				 page="resultados.jsp";					
			}
			else
			{
				req.getSession().setAttribute("msgErr", "No se han encontrado resultados");  
			}
			
		}else if ("agregarCotizacion".equals(action))
		{
			if (req.getParameter("opcion")!=null)
			{
				Boolean encontrado = false;
				ServicioDTO opSel = null;				
				int ids= Integer.valueOf(req.getParameter("opcion"));
				int idis= Integer.valueOf(req.getParameter("opcion"));
				ArrayList<ServicioDTO> servicios = (ArrayList<ServicioDTO>)req.getSession().getAttribute("servicios");
				for(ServicioDTO s : servicios)
				{
					if (!encontrado && (s.getId()==ids))
					{
						for(int k=0;k<s.getItems().size();k++)
						{
							if (s.getItems().get(k).getId()==idis)
							{
								encontrado=true;
							}
							else
							{
								s.getItems().remove(k);
							}
						}
					}
					if(encontrado)
					{
						opSel=s;
					}
				}	
			
				CotizacionDTO cdto = new CotizacionDTO();
				cdto.getSevicios().add(opSel);
				req.getSession().setAttribute("cotizacion", cdto);
				page="cotizacion.jsp";
			}
		}else if ("saveCotizacion".equals(action))
		{				
			CotizacionDTO cot = (CotizacionDTO)req.getSession().getAttribute("cotizacion");
			cot.setUsuario((UsuarioDTO)req.getSession().getAttribute("usr")); 
			cot.setPasajero(req.getParameter("pasajero"));
			cot.setEmail(req.getParameter("email"));							
			cot.setDocumento(req.getParameter("documento"));					
			cot = Sistema.getInstancia().guardarCotizacion(cot);
			req.getSession().setAttribute("cotizacion", cot);
			page="cotizacion.jsp";
		}
		else if ("verCotizacion".equals(action))
		{
			CotizacionDTO cot = Sistema.getInstancia().getCotizacion(Integer.valueOf(req.getParameter("id")));
			req.getSession().setAttribute("cotizacion", cot);
			page="cotizacion.jsp";
		}								
	
	RequestDispatcher dispatcher = req.getRequestDispatcher(page);
	dispatcher.forward(req, resp);	 
 }
protected void dispatch(String page, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    if (page != null)
    {
        RequestDispatcher rd = request.getRequestDispatcher(page);
        rd.forward(request, response);
    }
}
}